/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cursoexperto.jftf.controller;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.cursoexperto.jftf.controller.exceptions.NonexistentEntityException;
import org.cursoexperto.jftf.controller.exceptions.PreexistingEntityException;
import org.cursoexperto.jftf.entidades.LineaVenta;

/**
 *
 * @author Jose Fernando
 */
public class LineaVentaJpaController {

    public LineaVentaJpaController() {
        emf = Persistence.createEntityManagerFactory("WebApplicationPU");
    }
    private EntityManagerFactory emf = null;

    /**
     * Devuelve el EntityManager
     * @return EntityManager.
     */
    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    /**
     * Encuentra todas las linea de venta existentes.
     * @return Lista de linea de ventas.
     */
    public List<LineaVenta> findLineaVentaEntities() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from LineaVenta as o");
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    /**
     * Devuelve la linea de venta para su identificador.
     * @param id identificador de la linea de venta a buscar
     * @return Devuelve la linea de venta correspondiente a la busqueda o null
     */
    public List<LineaVenta> findLineaVentaByVenta(Long id) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            Query q = em.createQuery("SELECT l FROM LineaVenta l WHERE l.venta.id = :id");
            q.setParameter("id", id);
            return (List<LineaVenta>) q.getResultList();
        } finally {
            em.close();
        }
    }

    /**
     * Devuelve la linea de venta para su identificador.
     * @param id identificador de la linea de venta a buscar
     * @return Devuelve la linea de venta correspondiente a la busqueda o null
     */
    public LineaVenta findLineaVenta(Long id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(LineaVenta.class, id);
        } finally {
            em.close();
        }
    }

    /**
     * Devuelve el numero de lineas de venta
     * @return Devuelve el numero de lineas de venta
     */
    public int getLineaVentaCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from LineaVenta as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

    /**
     * Crea en base de datos un registro para el objeto Linea de Venta
     * @param lienaVenta identificador de la lineaVenta a crear
     */
    public void create(LineaVenta lineaVenta) throws PreexistingEntityException, Exception {
        throw new UnsupportedOperationException("Metodo no implementado");
    }

    /**
     * Edita en base de datos un registro para el objeto LineaVenta
     * @param lineaVenta identificador de la lineaVenta a editar
     */
    public void edit(LineaVenta lineaVenta) throws NonexistentEntityException, Exception {
        throw new UnsupportedOperationException("Metodo no implementado");
    }

    /**
     * Borra en base de datos un registro para el objeto LineaVenta
     * @param id identificador de la lineaVenta a borrar
     */
    public void destroy(Long id) throws NonexistentEntityException {
        throw new UnsupportedOperationException("Metodo no implementado");
    }
}
